donation-modal.scss 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. .donation-modal {
  2. position: fixed;
  3. inset: 0;
  4. z-index: 100;
  5. display: flex;
  6. align-items: center;
  7. justify-content: center;
  8. &__overlay {
  9. position: absolute;
  10. inset: 0;
  11. background: rgba(0, 0, 0, 0.5);
  12. }
  13. &__box {
  14. position: relative;
  15. width: 100%;
  16. max-width: 420px;
  17. max-height: 90vh;
  18. overflow-y: auto;
  19. background: var(--card);
  20. border: 1px solid var(--border);
  21. border-radius: 12px;
  22. padding: 24px;
  23. }
  24. &__header {
  25. display: flex;
  26. justify-content: space-between;
  27. align-items: center;
  28. margin-bottom: 20px;
  29. }
  30. &__title {
  31. font-size: 1.1rem;
  32. font-weight: 600;
  33. margin: 0;
  34. }
  35. &__close {
  36. background: none;
  37. border: none;
  38. font-size: 1.5rem;
  39. cursor: pointer;
  40. color: var(--muted-foreground);
  41. line-height: 1;
  42. }
  43. &__field {
  44. margin-bottom: 16px;
  45. > label {
  46. display: block;
  47. font-size: 0.8125rem;
  48. font-weight: 500;
  49. margin-bottom: 6px;
  50. color: var(--foreground);
  51. }
  52. > input, > textarea {
  53. width: 100%;
  54. padding: 8px 12px;
  55. border: 1px solid var(--border);
  56. border-radius: 6px;
  57. font-size: 0.875rem;
  58. background: var(--background);
  59. color: var(--foreground);
  60. resize: none;
  61. }
  62. }
  63. &__presets {
  64. display: flex;
  65. flex-wrap: wrap;
  66. gap: 6px;
  67. margin-bottom: 8px;
  68. }
  69. &__preset {
  70. padding: 6px 12px;
  71. border: 1px solid var(--border);
  72. border-radius: 20px;
  73. background: var(--background);
  74. color: var(--foreground);
  75. font-size: 0.8125rem;
  76. cursor: pointer;
  77. transition: all 0.15s;
  78. &:hover {
  79. border-color: var(--primary);
  80. }
  81. &--active {
  82. background: hsl(var(--primary));
  83. color: hsl(var(--primary-foreground));
  84. border-color: hsl(var(--primary));
  85. }
  86. }
  87. // 크루원 선택
  88. &__crew {
  89. margin-bottom: 16px;
  90. padding: 12px;
  91. background: var(--accent);
  92. border-radius: 8px;
  93. }
  94. &__crew-label {
  95. display: block;
  96. font-size: 0.8125rem;
  97. font-weight: 500;
  98. margin-bottom: 8px;
  99. }
  100. &__crew-tag {
  101. display: inline-block;
  102. padding: 2px 8px;
  103. background: hsl(var(--primary) / 0.15);
  104. color: hsl(var(--primary));
  105. border-radius: 4px;
  106. font-size: 0.75rem;
  107. font-weight: 600;
  108. margin-left: 4px;
  109. }
  110. &__crew-list {
  111. display: flex;
  112. flex-wrap: wrap;
  113. gap: 8px;
  114. }
  115. &__crew-item {
  116. display: flex;
  117. flex-direction: column;
  118. align-items: center;
  119. gap: 4px;
  120. padding: 8px 12px;
  121. border: 2px solid var(--border);
  122. border-radius: 8px;
  123. background: var(--background);
  124. cursor: pointer;
  125. font-size: 0.75rem;
  126. min-width: 72px;
  127. transition: all 0.15s;
  128. &:hover {
  129. border-color: hsl(var(--primary) / 0.5);
  130. }
  131. &--active {
  132. border-color: hsl(var(--primary));
  133. background: hsl(var(--primary) / 0.05);
  134. }
  135. > span {
  136. font-weight: 500;
  137. max-width: 64px;
  138. overflow: hidden;
  139. text-overflow: ellipsis;
  140. white-space: nowrap;
  141. }
  142. }
  143. &__crew-thumb {
  144. width: 40px;
  145. height: 40px;
  146. border-radius: 50%;
  147. object-fit: cover;
  148. &--default {
  149. display: flex;
  150. align-items: center;
  151. justify-content: center;
  152. background: var(--muted);
  153. color: var(--muted-foreground);
  154. font-size: 0.875rem;
  155. font-weight: 600;
  156. }
  157. }
  158. // 푸터
  159. &__footer {
  160. display: flex;
  161. gap: 8px;
  162. justify-content: flex-end;
  163. margin-top: 20px;
  164. }
  165. &__btn {
  166. padding: 8px 20px;
  167. border-radius: 6px;
  168. font-size: 0.875rem;
  169. font-weight: 500;
  170. cursor: pointer;
  171. border: 1px solid var(--border);
  172. background: var(--background);
  173. color: var(--foreground);
  174. transition: all 0.15s;
  175. &:hover {
  176. background: var(--accent);
  177. }
  178. &--primary {
  179. background: hsl(var(--primary));
  180. color: hsl(var(--primary-foreground));
  181. border-color: hsl(var(--primary));
  182. &:hover {
  183. opacity: 0.9;
  184. }
  185. &:disabled {
  186. opacity: 0.5;
  187. cursor: not-allowed;
  188. }
  189. }
  190. }
  191. // 완료 화면
  192. &__done {
  193. text-align: center;
  194. padding: 24px 0;
  195. }
  196. &__done-icon {
  197. font-size: 3rem;
  198. margin-bottom: 12px;
  199. }
  200. &__done-text {
  201. font-size: 1.1rem;
  202. font-weight: 600;
  203. margin-bottom: 20px;
  204. }
  205. }